import Web3 from 'web3';

// 导入合约的 ABI 和地址
import TaskManagerABI from './contract/memo.json'; // 确保你有正确的 ABI 文件
const contractAddress = '0x63E64247428ECeD1Ed7386bDd2A99291E74BAa23';  // 这里填写你部署合约后的地址

let web3;
let taskContract;

const useWeb3 = () => {
  // 检查浏览器是否有 Ethereum provider (MetaMask)
  if (window.ethereum) {
    web3 = new Web3(window.ethereum);
  } else {
    alert('请安装 MetaMask 插件');
    return;
  }

  // 请求用户授权连接钱包
  const requestAccount = async () => {
    try {
      await window.ethereum.request({ method: 'eth_requestAccounts' });
    } catch (error) {
      console.error('连接钱包失败:', error);
      alert('请授权 MetaMask 连接钱包');
      return;
    }
  };

  // 获取用户账户
  const getAccount = async () => {
    const accounts = await web3.eth.getAccounts();
    if (accounts.length === 0) {
      console.error('没有可用的账户');
      alert('没有可用的账户');
      return;
    }
    return accounts[0];
  };

  // 获取合约实例并返回
  const loadContract = async () => {
    try {
      await requestAccount();  // 请求钱包授权
      const account = await getAccount();  // 获取用户账户
      if (!account) return;

      // 如果 ABI 是一个对象而不是数组，取出正确的字段
      let abi = Array.isArray(TaskManagerABI) ? TaskManagerABI : TaskManagerABI.abi;

      // 获取合约实例
      taskContract = new web3.eth.Contract(abi, contractAddress);
      console.log('合约实例初始化成功');
    } catch (error) {
      console.error('合约初始化失败:', error);
    }
  };

  // 初始化 Web3 和合约
  const initWeb3 = async () => {
    await loadContract();
    return { web3, taskContract, getAccount };
  };

  // 返回初始化 Web3 和合约的 promise
  return { initWeb3 };
};

export default useWeb3;
